
import ast
from jsonpath import jsonpath
from tools.handle_attribute import HandleAttribute
from tools.handle_loging import my_logger


class HandleExtract:

    def __set__attribute(self, key, val):
        setattr(HandleAttribute, key, val)
        my_logger.info(msg="将{}={}设置为HandleAttribute类属性成功".format(key, val))

    def handle_extract(self, response, extract_data):
        """
        :param response:
               :type=dict
               响应结果
        :param extract_data:
                :type=dict
                {"token":"$..token","member_id":"$..member_id"}
               提取参数的key和提取规则
        :return:无

        """
        my_logger.info(msg="==============开始提取全局变量==============")
        my_logger.info(msg="全局变量来源之接口响应结果：{},类型为:{}".format(response, type(response)))
        my_logger.info(msg="全局变量提取规则：{},类型为:{}".format(extract_data, type(extract_data)))
        if extract_data:
            if isinstance(extract_data, dict):
                extract_data = extract_data
            else:
                extract_data = ast.literal_eval(extract_data)
            for key, value in extract_data.items():
                print(key, value)

                # 获取提取的结果
                extract_result = jsonpath(response, value)
                my_logger.info(msg="全局变量提取结果：{},类型为:{}".format(extract_result, type(extract_result)))
                # 设置成类属性
                self.__set__attribute(key=key, val=extract_result[0])
        else:
            my_logger.info(msg="全局变量提取规则为空无需提取")


if __name__ == '__main__':
    cl = HandleExtract()
    cl.handle_extract(response={}, extract_data={"token": "$..token", "member_id": "$..member_id"})
